home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / cpu / m6805 / m6805.h < prev   
C/C++ Source or Header  |  2000-05-18  |  6KB  |  159 lines

  1. /*** m6805: Portable 6805 emulator ******************************************/
  2.  
  3. #ifndef _M6805_H
  4. #define _M6805_H
  5.  
  6. #include "memory.h"
  7. #include "osd_cpu.h"
  8.  
  9. enum { M6805_PC=1, M6805_S, M6805_CC, M6805_A, M6805_X, M6805_IRQ_STATE };
  10.  
  11. #define M6805_INT_NONE  0           /* No interrupt required */
  12. #define M6805_INT_IRQ    1             /* Standard IRQ interrupt */
  13.  
  14. /* PUBLIC GLOBALS */
  15. extern int  m6805_ICount;
  16.  
  17. /* PUBLIC FUNCTIONS */
  18. extern void m6805_reset(void *param);
  19. extern void m6805_exit(void);
  20. extern int    m6805_execute(int cycles);
  21. extern unsigned m6805_get_context(void *dst);
  22. extern void m6805_set_context(void *src);
  23. extern unsigned m6805_get_pc(void);
  24. extern void m6805_set_pc(unsigned val);
  25. extern unsigned m6805_get_sp(void);
  26. extern void m6805_set_sp(unsigned val);
  27. extern unsigned m6805_get_reg(int regnum);
  28. extern void m6805_set_reg(int regnum, unsigned val);
  29. extern void m6805_set_nmi_line(int state);
  30. extern void m6805_set_irq_line(int irqline, int state);
  31. extern void m6805_set_irq_callback(int (*callback)(int irqline));
  32. extern void m6805_state_save(void *file);
  33. extern void m6805_state_load(void *file);
  34. extern const char *m6805_info(void *context, int regnum);
  35. extern unsigned m6805_dasm(char *buffer, unsigned pc);
  36.  
  37. /****************************************************************************
  38.  * 68705 section
  39.  ****************************************************************************/
  40. #if (HAS_M68705)
  41. #define M68705_A                    M6805_A
  42. #define M68705_PC                    M6805_PC
  43. #define M68705_S                    M6805_S
  44. #define M68705_X                    M6805_X
  45. #define M68705_CC                    M6805_CC
  46. #define M68705_IRQ_STATE            M6805_IRQ_STATE
  47.  
  48. #define M68705_INT_NONE             M6805_INT_NONE
  49. #define M68705_INT_IRQ                M6805_INT_IRQ
  50.  
  51. #define m68705_ICount                m6805_ICount
  52. extern void m68705_reset(void *param);
  53. extern void m68705_exit(void);
  54. extern int    m68705_execute(int cycles);
  55. extern unsigned m68705_get_context(void *dst);
  56. extern void m68705_set_context(void *src);
  57. extern unsigned m68705_get_pc(void);
  58. extern void m68705_set_pc(unsigned val);
  59. extern unsigned m68705_get_sp(void);
  60. extern void m68705_set_sp(unsigned val);
  61. extern unsigned m68705_get_reg(int regnum);
  62. extern void m68705_set_reg(int regnum, unsigned val);
  63. extern void m68705_set_nmi_line(int state);
  64. extern void m68705_set_irq_line(int irqline, int state);
  65. extern void m68705_set_irq_callback(int (*callback)(int irqline));
  66. extern void m68705_state_save(void *file);
  67. extern void m68705_state_load(void *file);
  68. extern const char *m68705_info(void *context, int regnum);
  69. extern unsigned m68705_dasm(char *buffer, unsigned pc);
  70. #endif
  71.  
  72. /****************************************************************************
  73.  * HD63705 section
  74.  ****************************************************************************/
  75. #if (HAS_HD63705)
  76. #define HD63705_A                    M6805_A
  77. #define HD63705_PC                    M6805_PC
  78. #define HD63705_S                    M6805_S
  79. #define HD63705_X                    M6805_X
  80. #define HD63705_CC                    M6805_CC
  81. #define HD63705_NMI_STATE            M6805_IRQ_STATE
  82. #define HD63705_IRQ1_STATE            M6805_IRQ_STATE+1
  83. #define HD63705_IRQ2_STATE            M6805_IRQ_STATE+2
  84. #define HD63705_ADCONV_STATE        M6805_IRQ_STATE+3
  85.  
  86. #define HD63705_INT_NONE            M6805_INT_NONE
  87. #define HD63705_INT_IRQ                M6805_INT_IRQ
  88. #define HD63705_INT_NMI                0x08
  89.  
  90. #define HD63705_INT_MASK            0x1ff
  91.  
  92. #define HD63705_INT_IRQ1            0x00
  93. #define HD63705_INT_IRQ2            0x01
  94. #define    HD63705_INT_TIMER1            0x02
  95. #define    HD63705_INT_TIMER2            0x03
  96. #define    HD63705_INT_TIMER3            0x04
  97. #define    HD63705_INT_PCI                0x05
  98. #define    HD63705_INT_SCI                0x06
  99. #define    HD63705_INT_ADCONV            0x07
  100.  
  101. #define hd63705_ICount                m6805_ICount
  102. extern void hd63705_reset(void *param);
  103. extern void hd63705_exit(void);
  104. extern int    hd63705_execute(int cycles);
  105. extern unsigned hd63705_get_context(void *dst);
  106. extern void hd63705_set_context(void *src);
  107. extern unsigned hd63705_get_pc(void);
  108. extern void hd63705_set_pc(unsigned val);
  109. extern unsigned hd63705_get_sp(void);
  110. extern void hd63705_set_sp(unsigned val);
  111. extern unsigned hd63705_get_reg(int regnum);
  112. extern void hd63705_set_reg(int regnum, unsigned val);
  113. extern void hd63705_set_nmi_line(int state);
  114. extern void hd63705_set_irq_line(int irqline, int state);
  115. extern void hd63705_set_irq_callback(int (*callback)(int irqline));
  116. extern void hd63705_state_save(void *file);
  117. extern void hd63705_state_load(void *file);
  118. extern const char *hd63705_info(void *context, int regnum);
  119. extern unsigned hd63705_dasm(char *buffer, unsigned pc);
  120. #endif
  121.  
  122. /****************************************************************************/
  123. /* Read a byte from given memory location                                   */
  124. /****************************************************************************/
  125. /* ASG 971005 -- changed to cpu_readmem16/cpu_writemem16 */
  126. #define M6805_RDMEM(Addr) ((unsigned)cpu_readmem16(Addr))
  127.  
  128. /****************************************************************************/
  129. /* Write a byte to given memory location                                    */
  130. /****************************************************************************/
  131. #define M6805_WRMEM(Addr,Value) (cpu_writemem16(Addr,Value))
  132.  
  133. /****************************************************************************/
  134. /* M6805_RDOP() is identical to M6805_RDMEM() except it is used for reading */
  135. /* opcodes. In case of system with memory mapped I/O, this function can be  */
  136. /* used to greatly speed up emulation                                       */
  137. /****************************************************************************/
  138. #define M6805_RDOP(Addr) ((unsigned)cpu_readop(Addr))
  139.  
  140. /****************************************************************************/
  141. /* M6805_RDOP_ARG() is identical to M6805_RDOP() but it's used for reading  */
  142. /* opcode arguments. This difference can be used to support systems that    */
  143. /* use different encoding mechanisms for opcodes and opcode arguments       */
  144. /****************************************************************************/
  145. #define M6805_RDOP_ARG(Addr) ((unsigned)cpu_readop_arg(Addr))
  146.  
  147. #ifndef FALSE
  148. #    define FALSE 0
  149. #endif
  150. #ifndef TRUE
  151. #    define TRUE (!FALSE)
  152. #endif
  153.  
  154. #ifdef MAME_DEBUG
  155. extern unsigned Dasm6805(char *buf, unsigned pc);
  156. #endif
  157.  
  158. #endif /* _M6805_H */
  159.